package pe.edu.upc.dew.grupo3a.dao;

import java.io.Console;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;

import pe.edu.upc.dew.grupo3a.model.Funcion;
import pe.edu.upc.dew.grupo3a.model.Pelicula;
import pe.edu.upc.dew.grupo3a.model.Sala;

public class FuncionDaoJdbc extends SimpleJdbcDaoSupport implements
FuncionDao{

	@Override
	public Funcion getFuncionPorCodigo(String codigofuncion) {
		try {
			return getSimpleJdbcTemplate()
			.queryForObject(
					"select f.codigofuncion,f.codigosala,f.codigopelicula,f.horainicio,f.horafinal,f.precio," +
					"f.subtitulada,f.butacasvendidas,p.nombre,p.genero,p.clasificacion,p.nacionalidad,p.director," +
					"p.sinopsis,p.duracion,p.fechaEstreno,p.fotoPath,p.estado,s.tipo,s.butacas " +
					"from funcion f, pelicula p, sala s where codigofuncion=? and f.codigopelicula=p.codigopelicula " +
					"and f.codigosala=s.codigosala",
					new RowMapper<Funcion>(){
						public Funcion mapRow(ResultSet rs, int rowNum) throws SQLException {
							Funcion funcion = new Funcion();
							funcion.setPelicula(new Pelicula());
							funcion.setSala(new Sala());
							funcion.getPelicula().setClasificacion(rs.getString("clasificacion"));
							funcion.getPelicula().setCodigoPelicula(rs.getString("codigopelicula"));
							funcion.getPelicula().setDirector(rs.getString("director"));
							funcion.getPelicula().setDuracion(rs.getShort("duracion"));
							funcion.getPelicula().setEstado(rs.getString("estado"));
							funcion.getPelicula().setFechaEstreno(rs.getDate("fechaEstreno"));
							funcion.getPelicula().setFotoPath(rs.getString("fotoPath"));
							funcion.getPelicula().setGenero(rs.getString("genero"));
							funcion.getPelicula().setNacionalidad(rs.getString("nacionalidad"));
							funcion.getPelicula().setNombre(rs.getString("nombre"));
							funcion.getPelicula().setSinopsis(rs.getString("sinopsis"));
							funcion.getSala().setButacas(rs.getInt("butacas"));
							funcion.getSala().setCodigoSala(rs.getString("codigosala"));
							funcion.getSala().setTipo(rs.getString("tipo"));
							funcion.setButacasVendidas(rs.getInt("butacasvendidas"));
							funcion.setCodigoFuncion(rs.getString("codigofuncion"));
							funcion.setHoraFin(rs.getTime("horafinal"));
							funcion.setHoraIni(rs.getTime("horainicio"));
							funcion.setPrecio(rs.getDouble("precio"));
							funcion.setSubtitulada(rs.getBoolean("subtitulada"));
							return funcion;
						}
					},
					codigofuncion);
			
		} catch(DataAccessException ex ){
			//System.out.println(ex.getMessage());
			return null;
		}
	}

	@Override
	public List<Funcion> getFuncionMayorIgualHoraInicio(String string) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Funcion> getFuncionPorSala(String string) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void actualizarFuncion(Funcion funcion) {
	
		getSimpleJdbcTemplate().update("Update funcion set codigosala=?,codigopelicula=?," +
				"horainicio=?,horafinal=?,precio=?,subtitulada=?,butacasvendidas=? " +
				"where codigofuncion=?",
				funcion.getSala().getCodigoSala(),
				funcion.getPelicula().getCodigoPelicula(),
				funcion.getHoraIni(),
				funcion.getHoraFin(),
				funcion.getPrecio(),
				funcion.getSubtitulada(),
				funcion.getButacasVendidas(),
				funcion.getCodigoFuncion());
	}
//	funcion.getCodigoFuncion(),
//	funcion.getSala().getCodigoSala(),
//	funcion.getPelicula().getCodigoPelicula(),
	
//	funcion.getHoraFin(),
//	funcion.getPrecio(),

	@Override
	public void insertarFuncion(Funcion funcion) {
		getSimpleJdbcTemplate().update("Insert into funcion (codigofuncion,codigosala,codigopelicula," +
				"horainicio,horafinal,precio,subtitulada,butacasvendidas) values(?,?,?,?,?,?,?,?)",
				funcion.getCodigoFuncion(),
				funcion.getSala().getCodigoSala(),
				funcion.getPelicula().getCodigoPelicula(),
				funcion.getHoraIni(),
				funcion.getHoraFin(),
				funcion.getPrecio(),
				funcion.getSubtitulada(),
				funcion.getButacasVendidas());
	}


	@Override
	public void eliminarFuncionPorCodigo(String codigofuncion) {
		getSimpleJdbcTemplate().update("delete from funcion where codigofuncion=?", codigofuncion);
	}

}
